Put back in pre Qt 5.4 code path in upgradecheck for Travis.
authorRobert Lipe <robertlipe@gpsbabel.org>
Thu, 7 Dec 2017 06:56:25 +0000 (00:56 -0600)
committerRobert Lipe <robertlipe@gpsbabel.org>
Thu, 7 Dec 2017 06:56:25 +0000 (00:56 -0600)
config.h.in
gui/app.pro
gui/upgrade.cc
gui/upgrade.h

index ba0fd3be0e000c023b9925f218a98a696f8a170d..f669911cfd84d0add71222e36cb7ba0cca12ecdd 100644 (file)
@@ -60,6 +60,9 @@
 /* Define to 1 if you have the <sys/types.h> header file. */
 #undef HAVE_SYS_TYPES_H
 
+/* Define to 1 if you have the `uname' function. */
+#undef HAVE_UNAME
+
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
index d97da1f506a8420ddb2ddf10fd9ddccec752138c..e5489f230389b33a282783d1b3a57d046c0064b0 100755 (executable)
@@ -17,8 +17,7 @@ QT += core \
       xml
 
 qtHaveModule(webenginewidgets) {
-  QT += webenginewidgets
-  QT += webchannel
+  QT += webenginewidgets webchannel
   DEFINES += HAVE_WEBENGINE
 } else {
   QT += webkit webkitwidgets 
index aca7c5d1c91ecbfcd450ccf7ff2dbe55884e979b..2986a04f3ee046f1d2b98630d300797fd861223f 100644 (file)
@@ -29,6 +29,9 @@
 #endif
 
 #include <cstdio>
+#if HAVE_UNAME
+#include <sys/utsname.h>
+#endif // HAVE_UNAME
 
 #include <QDebug>
 #include <QDesktopServices>
@@ -52,10 +55,10 @@ static const bool testing = false;
 UpgradeCheck::UpgradeCheck(QWidget *parent, QList<Format> &formatList,
                            BabelData& bd) :
   QObject(parent),
-  manager_(0), 
+  manager_(0),
   replyId_(0),
   upgradeUrl_(QUrl("http://www.gpsbabel.org/upgrade_check.html")),
-  formatList_(formatList), 
+  formatList_(formatList),
   updateStatus_(updateUnknown),
   babelData_(bd)
 {
@@ -78,6 +81,88 @@ bool UpgradeCheck::isTestMode()
   return testing;
 }
 
+// In Qt 5.4, QSysInfo got classes that do this better. Travis is stuck
+// on older version of Qt, so keep it building there for now.
+
+#if (QT_VERSION < QT_VERSION_CHECK(5, 4, 0))
+QString UpgradeCheck::getOsName()
+{
+  // Do not translate these strings.
+#if defined (Q_OS_LINUX)
+    return "Linux";
+#elif defined (Q_OS_MAC)
+  return "Mac";
+#elif defined (Q_OS_WIN)
+  return "Windows";
+#else
+  return "Unknown";
+#endif
+
+}
+// See http://doc.trolltech.com/4.5/qsysinfo.html to interpret results
+QString UpgradeCheck::getOsVersion()
+{
+#if defined (Q_OS_MAC)
+  switch (QSysInfo::MacintoshVersion) {
+  case QSysInfo::MV_10_3: return "10.3"; break;
+  case QSysInfo::MV_10_4: return "10.4"; break;
+  case QSysInfo::MV_10_5: return "10.5"; break;
+  case QSysInfo::MV_10_6: return "10.6"; break;
+  case QSysInfo::MV_10_7: return "10.7"; break;
+  case QSysInfo::MV_10_8: return "10.8"; break;
+  case QSysInfo::MV_10_9: return "10.9"; break;
+  case QSysInfo::MV_10_10: return "10.10"; break;
+  case QSysInfo::MV_10_11: return "10.11"; break;
+  case QSysInfo::MV_10_12: return "10.12"; break;
+  default:
+    if (QSysInfo::MacintoshVersion == 0x000E) {
+      return "10.13";
+      break;
+    }
+    if (QSysInfo::MacintoshVersion == 0x000F) {
+      return "10.14";
+      break;
+    }
+    return QString("Unknown Mac %1").arg(QSysInfo::MacintoshVersion);
+  };
+#elif defined (Q_OS_WIN)
+
+  switch (QSysInfo::WindowsVersion) {
+  // Wildly improbable...
+  case QSysInfo::WV_95: return "95"; break;
+  case QSysInfo::WV_98: return "98"; break;
+  case QSysInfo::WV_Me: return "Me"; break;
+
+  case QSysInfo::WV_4_0: return "NT 4"; break;
+  case QSysInfo::WV_5_0: return "2000"; break;
+  case QSysInfo::WV_5_1: return "XP"; break;
+  case QSysInfo::WV_5_2: return "2003"; break;
+  case QSysInfo::WV_6_0: return "Vista"; break;
+  case QSysInfo::WV_6_1: return "7"; break;
+  default:
+       if (QSysInfo::WindowsVersion == 0x00a0) return "8";
+       if (QSysInfo::WindowsVersion == 0x00b0) return "8.1";
+       if (QSysInfo::WindowsVersion == 0x00c0) return "10.0";
+      return "Windows/Unknown";
+  }
+#endif
+  // FIXME: find something appropriately clever to do for Linux, etc. here.
+  return "Unknown";
+}
+
+QString UpgradeCheck::getCpuArchitecture()
+{
+#if HAVE_UNAME || defined (Q_OS_MAC)     +  args += "&cpu=" + QSysInfo::currentCpuArchitecture();
+  struct utsname utsname;
+  if (0 == uname(&utsname)) {
+    return utsname.machine;
+  }
+  return QString();
+#endif
+}
+
+#else // #if (QT_VERSION < QT_VERSION_CHECK(5, 4, 0))
+
 QString UpgradeCheck::getOsName()
 {
   return QSysInfo::productType();
@@ -88,6 +173,13 @@ QString UpgradeCheck::getOsVersion()
   return QSysInfo::productVersion();
 }
 
+QString UpgradeCheck::getCpuArchitecture()
+{
+  return QSysInfo::currentCpuArchitecture();
+}
+
+#endif // #if (QT_VERSION < QT_VERSION_CHECK(5, 4, 0))
+
 UpgradeCheck::updateStatus UpgradeCheck::checkForUpgrade(
                const QString &currentVersionIn,
                const QDateTime &lastCheckTime,
@@ -117,17 +209,17 @@ UpgradeCheck::updateStatus UpgradeCheck::checkForUpgrade(
   args += "&current_gui_version=" VERSION;
   args += "&installation=" + babelData_.installationUuid_;
   args += "&os=" + getOsName();
-  args += "&cpu=" + QSysInfo::currentCpuArchitecture();
+  args += "&cpu=" + getCpuArchitecture();
   args += "&os_ver=" + getOsVersion();
-  args += QString("&beta_ok=%1").arg(allowBeta); 
+  args += QString("&beta_ok=%1").arg(allowBeta);
   args += "&lang=" + QLocale::languageToString(locale.language());
   args += "&last_checkin=" + lastCheckTime.toString(Qt::ISODate);
-  args += QString("&ugcb=%1").arg(babelData_.upgradeCallbacks_); 
-  args += QString("&ugdec=%1").arg(babelData_.upgradeDeclines_); 
-  args += QString("&ugacc=%1").arg(babelData_.upgradeAccept_); 
-  args += QString("&ugoff=%1").arg(babelData_.upgradeOffers_); 
-  args += QString("&ugerr=%1").arg(babelData_.upgradeErrors_); 
-  args += QString("&rc=%1").arg(babelData_.runCount_); 
+  args += QString("&ugcb=%1").arg(babelData_.upgradeCallbacks_);
+  args += QString("&ugdec=%1").arg(babelData_.upgradeDeclines_);
+  args += QString("&ugacc=%1").arg(babelData_.upgradeAccept_);
+  args += QString("&ugoff=%1").arg(babelData_.upgradeOffers_);
+  args += QString("&ugerr=%1").arg(babelData_.upgradeErrors_);
+  args += QString("&rc=%1").arg(babelData_.runCount_);
 
   int j = 0;
 
@@ -191,14 +283,14 @@ void UpgradeCheck::httpRequestFinished(QNetworkReply* reply)
         qDebug() << "redirect to " << redirectUrl.toString();
       }
       // Change the url for the next update check.
-      // TOODO: kick off another update check.  
+      // TOODO: kick off another update check.
       upgradeUrl_ = redirectUrl;
       replyId_ = 0;
       reply->deleteLater();
       return;
     }
   }
-  
+
   QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
   if (testing) {
     qDebug() << "http status code " << statusCode.toInt();
@@ -220,7 +312,7 @@ void UpgradeCheck::httpRequestFinished(QNetworkReply* reply)
   QDomDocument document;
   int line = -1;
   QString error_text;
-  // This shouldn't ever be seen by a user.  
+  // This shouldn't ever be seen by a user.
   if (!document.setContent(oresponse, &error_text, &line)) {
     QMessageBox::critical(0, tr("Error"),
            tr("Invalid return data at line %1: %2.")
@@ -281,7 +373,7 @@ void UpgradeCheck::httpRequestFinished(QNetworkReply* reply)
     information.setDefaultButton(QMessageBox::Yes);
     information.setTextFormat(Qt::RichText);
     information.setText(response);
-    
+
     information.setInformativeText(tr("Do you wish to download an upgrade?"));
     // The text field can be RichText, but DetailedText can't be. Odd.
     information.setDetailedText(upgradeText);
index 7d8865010b8843a3df7b9e6ba191e7960bedbd89..05c33864910b40ac1ec169f5f121ea1591e3611c 100644 (file)
@@ -59,8 +59,9 @@ private:
   updateStatus updateStatus_;
   BabelData& babelData_;
 
-  QString getOsName(void);
-  QString getOsVersion(void);
+  QString getOsName();
+  QString getOsVersion();
+  QString getCpuArchitecture();
 
 private slots:
   void httpRequestFinished(QNetworkReply* reply);